package com.cskaoyan.javase.oop1._13block._3static.classload;

/**
 * 类加载的补充细节
 * 之前我们说:"触发类加载,完成类加载,再开始创建对象"
 * 这句话在绝大多数情况下是正确,但也有例外
 * 比如在类加载过程中,创建类自身的静态成员变量对象,这是允许的
 *
 *
 *
 *
 * @since 16:30
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    /*
        在类加载过程中
        创建自身对象
        类加载都没有结束,在类加载的过程中,为什么能够创建自己的对象呢?

        这里需要初始化类Demo
        首先需要加载和连接
        然后进行初始化的步骤
        在初始化步骤执行过程中,需要创建自身类对象

        这个语句能够通过编译能够运行说明:
            1.一个类只要经过 加载 --> 连接 就能够创建它的对象了,不需要初始化完成.
            2.某个类一旦开始进行初始化,不管有没有完成,都不会在进行第二次初始化了
                这主要针对在类初始化步骤中,碰到再次需要初始化类的时机

     */
    static Demo d = new Demo();
    static {
        System.out.println("666666666");
    }

    public static void main(String[] args) {
        System.out.println("hello world!");
        new Demo();
    }

    public Demo() {
        System.out.println("无参构造");
    }
}